# 输出斐波那契数列前N
# 直接在 fab 函数中用 print 打印数字会导致该函数可复用性较差，
# 因为 fab 函数返回 None，其他函数无法获得该函数生成的数列。
def fib(n):
    a,b = 0,1
    while n > 0:
        print(b)
        a,b = b,a+b
        n -= 1

def fib2(n):
    a,b = 0,1
    L=[]
    while n > 0:
        L.append(b)
        a,b = b,a+b
        n -= 1
    return  L


def fib3(n):
    a,b = 0,1
    while n > 0:
        yield b
        a,b = b,a+b
        n -= 1
'''
体会yield的作用
另一个 yield 的例子来源于文件读取。如果直接对文件对象调用 read() 方法，会导致不可预测的内存占用
'''

if __name__ == '__main__':
    L = fib3(5)
    for x in L:
        print(x)